class Solution {
public:
    int lengthOfLongestSubstring(string s) {
        // 时间O（N）， 空间O（1）
        int hash[128] = { 0 }; // 数组模拟哈希表->s由英文字母、数字、符号和空格组成
        int n =  s.size(), ret = 0, left = 0, right = 0;
        while(right < n)
        {
            hash[s[right]]++; // 进窗口->进入哈希表
            while(hash[s[right]] > 1)
            {
                hash[s[left++]]--; // 出窗口->哈希表的值减减然后left加加
            }
            ret = max(ret, right - left + 1); // 更新结果
            ++right; // 下一个元素进入窗口
        }
        return ret;
    }
};